1"use client";
2
3import { useParams, useRouter } from "next/navigation";
4import { useEffect } from "react";
5import { useWorkspace } from "@/hooks/use-workspace";
6import { useUiStore } from "@/stores/ui-store";
7
8
13export default function WorkspaceLayout({ children }: { children: React.ReactNode }) {
14 const params = useParams<{ workspace: string }>();
15 const slugOrId = params?.workspace ?? "";
16 const { isError } = useWorkspace(slugOrId);
17 const router = useRouter();
18 const setSearchWorkspace = useUiStore((s) => s.setSearchWorkspace);
19
20
21 useEffect(() => {
22 if (isError && slugOrId) {
23 router.replace("/w/default");
24 }
25 }, [isError, slugOrId, router]);
26
27
28
29
30 useEffect(() => {
31 if (slugOrId) setSearchWorkspace(slugOrId);
32 }, [slugOrId, setSearchWorkspace]);
33
34 if (isError) return null;
35
36 return <>{children}</>;
37}
38
39
40export function useActiveWorkspaceSlug(): string {
41 const params = useParams<{ workspace: string }>();
42 return params?.workspace ?? "default";
43}
44